#include "mysql_conn.h"
#include <stdio.h>
#include <string.h>

MYSQL* get_mysql(char* user, char* pwd, char* mysql_db)
{
    MYSQL* mysql = mysql_init(NULL);
    if(mysql == NULL)
    {
        perror("mysql_init");
        return NULL;
    }

    mysql = mysql_real_connect(mysql, "localhost", user, pwd, mysql_db, 0, NULL, 0);
    if(mysql == NULL)
    {
        perror("mysql_real_connect");
        return NULL;
    }

    return mysql;
}

int store_data(MYSQL* mysql, const char* filename, const char* fileid)
{
    char sql[256];
    sprintf(sql, "insert into file(name, file_id) values('%s', '%s')", filename, fileid);
    int ret = mysql_query(mysql, sql);
    if(ret != 0)
    {
        perror("mysql_query");
        return -1;
    }

    return 0;
}

// 处理数据库查询结果，结果集保存在buf，只处理一条记录，一个字段, 如果buf为NULL，无需保存结果集，只做判断有没有此记录
// 返回值： 0成功并保存记录集，1没有记录集，2有记录集但是没有保存，-1失败
int process_result_one(MYSQL* conn, char* sql_cmd, char* buf)
{
    int ret = 0;
    MYSQL_RES* res_set = NULL;

    if(mysql_query(conn, sql_cmd) != 0)
    {
        perror("mysql_query err\n");
        ret = -1;
        goto END;
    }

    res_set = mysql_store_result(conn);
    if(res_set == NULL)
    {
        perror("mysql_store_result error\n");
        ret = -2;
        goto END;
    }

    MYSQL_ROW row;
    ulong line = 0;
    line = mysql_num_rows(res_set);
    if(line == 0)
    {
        ret = 1;//1没有记录集
        goto END;
    }
    else if(line > 0 && buf == NULL)
    {
        ret = 2;//2有记录集但是不保存
        goto END;
    }

    if((row = mysql_fetch_row(res_set)) != NULL)
    {
        if(row[0] != NULL)
        {
            strcpy(buf, row[0]);
        }
    }
END:
    if(res_set != NULL)
    {
        mysql_free_result(res_set);
    }

    return ret;
}
